Dynamically allocating space on disk or storage is important for computing system reasons. Disk storage, in contrast to volatile memory, permits data to persist over time, even after the computing system is powered down or shut down. In recent computer systems, the amount of data stored within file systems is constantly increasing. For example, storage systems may have multiple disks of many terabytes (TBs) of storage space. Nevertheless, the need remains in storage systems to allocate storage dynamically. In many cases, sizes of memory being requested are unknown until the time of the request. The lifetime for a dynamically allocated block may also be unknown. While techniques for allocating space in memory have been developed, such approaches are generally inapplicable to managing storage persistently due to the differences in size capacity and speed between storage and memory. A memory allocation algorithm would generally require too much memory and be too slow when directly used for storage. As such, storage systems or file systems need some mechanism for remembering which storage blocks have been allocated and which are not.